Bug 551987 – GtkPaned redrawing problem
authorMatthias Clasen <mclasen@redhat.com>
Tue, 16 Sep 2008 04:54:13 +0000 (04:54 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 16 Sep 2008 04:54:13 +0000 (04:54 +0000)
2008-09-16  Matthias Clasen  <mclasen@redhat.com>

        Bug 551987 – GtkPaned redrawing problem

        * gtk/gtkpaned.c: Remove excess invalidations. Patch by Owen Taylor

svn path=/trunk/; revision=21400

ChangeLog
gtk/gtkpaned.c

index ac59e660d2a0c723e3036ad18e5a622bf1ffe887..140ce37852c066a6cfdd278ba173f913ccc01299 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+       Bug 551987 – GtkPaned redrawing problem
+
+       * gtk/gtkpaned.c: Remove excess invalidations. Patch by Owen Taylor
+
 2008-09-16  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 551987 – GtkPaned redrawing problem
index c556b1d44051767f8d544abdc041a2b7827f035e..4f2db528a5c85b9ef49ad1464cb9803320ddf9c2 100644 (file)
@@ -536,7 +536,11 @@ static void
 gtk_paned_init (GtkPaned *paned)
 {
   GTK_WIDGET_SET_FLAGS (paned, GTK_NO_WINDOW | GTK_CAN_FOCUS);
-  
+
+  /* We only need to redraw when the handle position moves, which is
+   * independent of the overall allocation of the GtkPaned */
+  gtk_widget_set_redraw_on_allocate (GTK_WIDGET (paned), FALSE);
+
   paned->child1 = NULL;
   paned->child2 = NULL;
   paned->handle = NULL;
@@ -577,7 +581,7 @@ gtk_paned_set_property (GObject        *object,
       break;
     case PROP_POSITION_SET:
       paned->position_set = g_value_get_boolean (value);
-      gtk_widget_queue_resize (GTK_WIDGET (paned));
+      gtk_widget_queue_resize_no_redraw (GTK_WIDGET (paned));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -658,7 +662,7 @@ gtk_paned_set_child_property (GtkContainer    *container,
       break;
     }
   if (old_value != new_value)
-    gtk_widget_queue_resize (GTK_WIDGET (container));
+    gtk_widget_queue_resize_no_redraw (GTK_WIDGET (container));
 }
 
 static void
@@ -1145,7 +1149,7 @@ gtk_paned_remove (GtkContainer *container,
       paned->child1 = NULL;
 
       if (was_visible && GTK_WIDGET_VISIBLE (container))
-       gtk_widget_queue_resize (GTK_WIDGET (container));
+       gtk_widget_queue_resize_no_redraw (GTK_WIDGET (container));
     }
   else if (paned->child2 == widget)
     {
@@ -1154,7 +1158,7 @@ gtk_paned_remove (GtkContainer *container,
       paned->child2 = NULL;
 
       if (was_visible && GTK_WIDGET_VISIBLE (container))
-       gtk_widget_queue_resize (GTK_WIDGET (container));
+       gtk_widget_queue_resize_no_redraw (GTK_WIDGET (container));
     }
 }
 
@@ -1232,7 +1236,7 @@ gtk_paned_set_position (GtkPaned *paned,
   g_object_notify (object, "position-set");
   g_object_thaw_notify (object);
 
-  gtk_widget_queue_resize (GTK_WIDGET (paned));
+  gtk_widget_queue_resize_no_redraw (GTK_WIDGET (paned));
 
 #ifdef G_OS_WIN32
   /* Hacky work-around for bug #144269 */